# 如果给定一个list或tuple，我们可以通过for循环来遍历这个list或tuple，这种遍历我们称为迭代（Iteration）。
# dict迭代输出
from collections.abc import Iterable
d = {'a': 1, 'b': 2, 'c': 3, 'd': 89}
for key in d:  # 迭代key
    print(key)
for value in d.values():  # 迭代value
    print(value)
for k, v in d.items():  # 迭代key和value
    print(k, v)
    print(k,'=', v)

for ch in 'ABCDE':
    print(ch)
# 如何判断一个对象是可迭代对象呢？方法是通过collections.abc模块的Iterable类型判断
print(isinstance('abcd', Iterable))  # str是否可迭代
print(isinstance([1, 2, 3, 4], Iterable))  # list是否可迭代
print(isinstance((2, 4, 6, 8, 10), Iterable))  # tuple是否可迭代
print(isinstance(1234, Iterable))  # 整数是否可迭代
#Python内置的enumerate函数可以把一个list变成索引-元素对，这样就可以在for循环中同时迭代索引和元素本身：
for i, value in enumerate(['A', 'B', 'C', 'D']):
    print(i,value)

for x,y in [(1,2),(3,4),(5,6)]:
    print(x,y)

#练习:请使用迭代查找一个list中最小和最大值，并返回一个tuple：
# -*- coding: utf-8 -*-
def findMinAndMax(L):
    if L == []:
        return (None,None)
    else:
        min = L[0]
        max = L[0]
        for i in L:
            if i < min:
                min = i
            elif i > max:
                max = i
    return (min,max)
# 测试
if findMinAndMax([]) != (None, None):
    print('测试失败!')
elif findMinAndMax([7]) != (7, 7):
    print('测试失败!')
elif findMinAndMax([7, 1]) != (1, 7):
    print('测试失败!')
elif findMinAndMax([7, 1, 3, 9, 5]) != (1, 9):
    print('测试失败!')
else:
    print('测试成功!')


import random
#简短测试
L = list(range(0, 10))
random.shuffle(L)
print(L)
print(findMinAndMax(L))